package view;

import interfaces.Client_ITF;

import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.rmi.RemoteException;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;

import rmiClient.Client_IMPL;
import rmiClient.Token;

public class MainFrame extends JFrame {
	class ChoixVideoListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {
			nomVideo = JOptionPane.showInputDialog(null,
					"Nom de la vidéo (avec extension) : ", "Nom de la vidéo",
					JOptionPane.QUESTION_MESSAGE);
		}

	}

	class LectureActionListener implements ActionListener {
		@Override
		public void actionPerformed(ActionEvent arg0) {
			/**
			 * 
			 * Lancer AVReceive2 et VideoTransmit
			 * 
			 * 
			 */

			lectureEnCours = true;

			Token tok = new Token(client, nomVideo);

			try {
				client.electionWithoutDiffusion(tok);
			} catch (RemoteException e) {
				e.printStackTrace();
			}

			// on récupère l'adresse ip
			/*
			 * String ip = ""; try { ip =
			 * InetAddress.getLocalHost().getHostAddress(); } catch
			 * (UnknownHostException e1) { // TODO Auto-generated catch block
			 * e1.printStackTrace(); }
			 */
		}
	}

	class StopActionListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent arg0) {
			if (lectureEnCours) {
				try {
					client.getEmettor().stopStreamming();
				} catch (RemoteException e) {
					JOptionPane.showConfirmDialog(null,
							"La vidéo n'as pu être stoppée");
				}

			}
		}
	}

	/**
	 * 
	 */
	private static final long serialVersionUID = -474556072239438228L;
	private JMenuBar menuBar = new JMenuBar();

	private JMenu menuFichier = new JMenu("Fichier");
	private JMenu menuServeur = new JMenu("Serveur");
	private JMenu menuClient = new JMenu("Client");
	private JMenuItem sousMenuChoixVideo = new JMenuItem("Choix Vidéo");
	private JMenuItem sousMenuFermer = new JMenuItem("Fermer");
	private JMenuItem sousMenuInfoServeur = new JMenuItem("Informations");

	private JMenuItem sousMenuDecoServeur = new JMenuItem("Déconnecter");
	private JMenuItem sousMenuInfoClient = new JMenuItem("Informations");

	private JMenuItem sousMenuScore = new JMenuItem("Score");
	// Nos boutons de lecture et stop
	private JButton lecture = new JButton(new ImageIcon("iconeLecture.jpeg"));

	private JButton stop = new JButton(new ImageIcon("iconeStop.jpeg"));
	// le nom de la vidéo et le numéro du port
	private String nomVideo = "forman.mov";
	private String port = "42050";

	private VideoTransmit vt;

	public static boolean lectureEnCours = false;

	Client_ITF emettor;

	private Client_IMPL client;

	public MainFrame(Client_IMPL c) {
		client = c;

		setTitle("Interface vidéo");
		this.setSize(300, 200);
		setLocationRelativeTo(null);
		setResizable(false);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		sousMenuChoixVideo.addActionListener(new ChoixVideoListener());

		// on ajoute les sous menus à leur menus respectifs
		menuFichier.add(sousMenuChoixVideo);
		sousMenuFermer.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				try {
					client.getServer().removeClient(client);
				} catch (RemoteException e) {
					e.printStackTrace();
				}
				System.exit(0);
			}
		});
		menuFichier.add(sousMenuFermer);

		sousMenuInfoServeur.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				String mess = "";
				try {
					mess = client.getServer().getInfos();
				} catch (RemoteException e) {
					e.printStackTrace();
				}
				JOptionPane.showMessageDialog(null, mess,
						"Informations du Serveur",
						JOptionPane.INFORMATION_MESSAGE);
			}

		});
		menuServeur.add(sousMenuInfoServeur);

		sousMenuDecoServeur.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				// deconnecter le serveur?
			}
		});
		menuServeur.add(sousMenuDecoServeur);

		sousMenuInfoClient.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				String infos = "";
				try {
					infos = client.getInfo();
				} catch (RemoteException e) {
					e.printStackTrace();
				}
				JOptionPane.showMessageDialog(null, infos,
						"Informations du Client",
						JOptionPane.INFORMATION_MESSAGE);
			}
		});
		menuClient.add(sousMenuInfoClient);

		sousMenuScore.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent arg0) {
				String mess = JOptionPane.showInputDialog(null,
						"Nouveau score : ", "Score",
						JOptionPane.QUESTION_MESSAGE);

				try {
					int score = Integer.parseInt(mess);
					client.setScoreLocal(score);
					JOptionPane.showMessageDialog(null,
							"nouveau score" + score, "Score validé",
							JOptionPane.INFORMATION_MESSAGE);
				} catch (NumberFormatException e) {
					JOptionPane
							.showMessageDialog(
									null,
									"le score entré doit être un entier\n opération annulée",
									"Erreur", JOptionPane.INFORMATION_MESSAGE);
				}
			}
		});
		menuClient.add(sousMenuScore);

		// on ajoute les menu à la barre de menus
		menuBar.add(menuFichier);
		menuBar.add(menuServeur);
		menuBar.add(menuClient);

		setLayout(new FlowLayout());

		lecture.addActionListener(new LectureActionListener());
		stop.addActionListener(new StopActionListener());

		this.add(lecture);
		this.add(stop);

		setJMenuBar(menuBar);
		setVisible(true);
	}
}
